package com.killer.linear;

/**
 * 链表栈
 * @param <T>
 */
public class MyLinkedStack<T> implements MyStack<T> {

    /**
     * 头结点
     */
    private Node<T> head;

    /**
     * 元素个数
     */
    private int size;

    public void push(T t) {
        size++;
        Node<T> node = new Node<T>(t);
        //判断头结点是否为空
        if (head == null) {
            head=node;
            return;
        }
        //由于只能从栈顶弹出,为了好操作,可以直接将新插入的节点当成头结点,next指向原来的头结点
        node.next=head;
        head=node;
    }

    public T pop() {
        if (head==null) {
            throw new RuntimeException("栈已经为空了");
        }
        //将头结点弹出,头结点指向下一个节点
        Node<T> tmp=head;
        head=head.next;
        //元素个数减1
        size--;
        return tmp.data;
    }

    public int size() {
        return size;
    }

    private class Node<T>{

        T data;
        Node<T> next;

        public Node(T data) {
            this.data = data;
        }
    }
}
